package br.urca.model;

import java.io.Serializable;
import java.util.Comparator;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 *
 * @author Lucas
 */
@Entity
@Table(name = "BI_COPIAS")
public class BiCopias implements Serializable {
    
	private static final long serialVersionUID = 1L;
	
	public static final Comparator<BiCopias> POR_ANO = new Comparator<BiCopias>() {

		@Override
		public int compare(BiCopias o1, BiCopias o2) {
			int av = Integer.valueOf(o1.getAno()), bv = Integer.valueOf(o2.getAno());
		      return (av == bv) ? 0 : ((av < bv) ? -1 : +1);
		}
	};
    
	@EmbeddedId
    protected BiCopiasPK biCopiasPK;
    
	@Column(name = "DATA_REGISTRO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataRegistro;
    
	@Column(name = "TIPO_AQUISICAO")
    private Character tipoAquisicao;
    
	@Column(name = "VOLUME")
    private Integer volume;
    
	@Column(name = "TOMO")
    private Integer tomo;
    
	@Column(name = "EXEMPLAR")
    private Integer exemplar;
    
	@Column(name = "SITUACAO")
    private Character situacao;
    
	@Column(name = "NUMERO")
    private String numero;
    
	@Column(name = "SERIE")
    private Short serie;
    
	@Column(name = "ANO")
    private Short ano;
    
	@Lob
    @Column(name = "NOTAS")
    private String notas;
    
	@Column(name = "MES")
    private Short mes;
    
	@Column(name = "REGISTRO_PATRIMONIAL")
    private String registroPatrimonial;
	
	@Transient
	private String status;
	    
    @JoinColumn(name = "COD_UNIDADE", referencedColumnName = "COD_UNIDADE")
    @ManyToOne
    private BiUnidades codUnidade;
    
    @JoinColumns({
        @JoinColumn(name = "COD_TIPO_MATERIAL", referencedColumnName = "COD_TIPO_MATERIAL", insertable = false, updatable = false),
        @JoinColumn(name = "COD_NUMERO_MATERIAL", referencedColumnName = "COD_NUMERO_MATERIAL", insertable = false, updatable = false)})
    @ManyToOne(optional = false)
    private BiMateriais biMateriais;
    
    public BiCopias() {
    }

    public BiCopias(BiCopiasPK biCopiasPK) {
        this.biCopiasPK = biCopiasPK;
    }

    public BiCopias(Character codTipoMaterial, int codNumeroMaterial, String codRegistro) {
        this.biCopiasPK = new BiCopiasPK(codTipoMaterial, codNumeroMaterial, codRegistro);
    }

    public BiCopiasPK getBiCopiasPK() {
        return biCopiasPK;
    }

    public void setBiCopiasPK(BiCopiasPK biCopiasPK) {
        this.biCopiasPK = biCopiasPK;
    }

    public Date getDataRegistro() {
        return dataRegistro;
    }

    public void setDataRegistro(Date dataRegistro) {
        this.dataRegistro = dataRegistro;
    }

    public Character getTipoAquisicao() {
        return tipoAquisicao;
    }

    public void setTipoAquisicao(Character tipoAquisicao) {
        this.tipoAquisicao = tipoAquisicao;
    }

    public Integer getVolume() {
        return volume;
    }

    public void setVolume(Integer volume) {
        this.volume = volume;
    }

    public Integer getTomo() {
        return tomo;
    }

    public void setTomo(Integer tomo) {
        this.tomo = tomo;
    }

    public Integer getExemplar() {
        return exemplar;
    }

    public void setExemplar(Integer exemplar) {
        this.exemplar = exemplar;
    }

    public Character getSituacao() {
        return situacao;
    }

    public void setSituacao(Character situacao) {
        this.situacao = situacao;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public Short getSerie() {
        return serie;
    }

    public void setSerie(Short serie) {
        this.serie = serie;
    }

    public Short getAno() {
        return ano;
    }

    public void setAno(Short ano) {
        this.ano = ano;
    }

    public String getNotas() {
        return notas;
    }

    public void setNotas(String notas) {
        this.notas = notas;
    }

    public Short getMes() {
        return mes;
    }

    public void setMes(Short mes) {
        this.mes = mes;
    }

    public String getRegistroPatrimonial() {
        return registroPatrimonial;
    }

    public void setRegistroPatrimonial(String registroPatrimonial) {
        this.registroPatrimonial = registroPatrimonial;
    }

    public BiUnidades getCodUnidade() {
        return codUnidade;
    }

    public void setCodUnidade(BiUnidades codUnidade) {
        this.codUnidade = codUnidade;
    }

    public BiMateriais getBiMateriais() {
        return biMateriais;
    }

    public void setBiMateriais(BiMateriais biMateriais) {
        this.biMateriais = biMateriais;
    }

    @Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((biCopiasPK == null) ? 0 : biCopiasPK.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		BiCopias other = (BiCopias) obj;
		if (biCopiasPK == null) {
			if (other.biCopiasPK != null)
				return false;
		} else if (!biCopiasPK.equals(other.biCopiasPK))
			return false;
		return true;
	}
	
	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	@Override
    public String toString() {
        return "model.BiCopias[ biCopiasPK=" + biCopiasPK + " ]";
    }
    
}
